package com.lhoverc.service.apply;

import com.lhoverc.pojo.PageBean;
import com.lhoverc.pojo.VO.ApplyDataVO;
import com.lhoverc.pojo.VO.TodayApplyVO;
import com.lhoverc.pojo.dto.AddApplyDto;
import com.lhoverc.pojo.entity.ApplyEntity;
import com.lhoverc.pojo.dto.InvitationDto;
import com.lhoverc.pojo.Result;
import jakarta.mail.MessagingException;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @Author: LiCheng
 * @CreateTime: 2025-04-16
 * @Description:
 * @Version: 1.0
 */
public interface ApplyService {
    /**
     * 检查访客数据是否正确
     * @param invitationDto
     * @return
     */
    Result check(InvitationDto invitationDto);

    /**
     * 通过检测
     * @param applyEntity
     */
    void pass(ApplyEntity applyEntity);

    /**
     * 获取当天申请数量
     * @return
     */
    List<TodayApplyVO> getApplyById(Integer id);

    /**
     * 批同意申请
     * @param ids
     */
    void allowApply(List<Integer> ids);

    /**
     * 批拒绝申请
     * @param ids
     */
    void refuseApply(List<Integer> ids);

    /**
     * 条件查询申请数据
     * @param userId
     * @param visitorName
     * @param state
     * @param startTime
     * @param endTime
     * @return
     */
    List<ApplyDataVO> getApplyData(Integer userId, String visitorName, Integer state, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 获取当天所有的申请
     * @return
     */
    List<ApplyDataVO> getAllTodayApply();

    /**
     * 分页获取所由申请
     * @param searchKeyword
     * @param statusKeyword
     * @param startTime
     * @param endTime
     * @param page
     * @param pageSize
     * @return
     */
    PageBean getAllApply(String searchKeyword, Integer statusKeyword, LocalDateTime startTime, LocalDateTime endTime, Integer page, Integer pageSize);

    /**
     * 添加申请
     * @param addApplyDto
     */
    void addApply(AddApplyDto addApplyDto) throws MessagingException;

    /**
     * 更新信息
     * @param applyDataVO
     */
    void updateApply(ApplyDataVO applyDataVO);

    /**
     * 批量删除申请信息
     * @param ids
     */
    void deleteApply(List<Integer> ids);

    List<ApplyEntity> getApply();
}
